package com.zw.a.basic.a14.demo01_ip;

import java.net.InetAddress;
import java.net.UnknownHostException;

/*
    网络编程: 也叫套接字编程, 也叫Socket编程.
        概述:
            网络编程就是用来实现 网络互联的 不同计算机上 运行的程序间 可以进行数据交互.
            大白话: 就是用来实现不同电脑之间的数据通信的.
        三要素:
            IP地址:
                概述:
                    设备在网络中的唯一标识.
                组成:
                    网络(关)号码 + 主机地址.     //例如: 192.168.10.66
                分类:
                    局域网:    3 + 1,  即: 前3段是网关号码, 最后一段是ip地址.
                        例如: 192.168.37.0 到 192.168.37.255   理论上来讲最大支持256个IP.
                    广域网:    2 + 2
                    城域网:    1 + 3
                 两个DOS指令:
                    ipconfig /all       查看本机ip
                    ping ip地址 -t      测试网络连接.
                 一个特殊的IP:
                    127.0.0.1   本地回环(回路)地址, 即: 表示本机.

                 IP地址包装类:  InetAddress(它是IP地址对象的对象形式)
                    String类型的IP     ->    InetAddress IP地址对象.
                         public static InetAddress getByName(String host)   根据主机名或者ip地址, 获取其对象的ip对象形式.
                    InetAddress IP地址对象  ->  String类型的IP
                        public String getHostIp();      根据IP地址对象获取其对应的 String形式的IP
                        public String getHostName();    根据IP地址对象获取其对应的 主机名
            端口号:
                概述:
                    程序在设备上的唯一标识.
                范围:
                    0 到 65535, 其中0 到 1023已经被系统占用了或者用作保留端口, 我们在使用端口号的时候要避开这个区间.
            协议:
                概述:
                    就是程序间进行交互, 通信的规则.
                分类:
                    UDP:        //举例: QQ群聊, 微信群聊
                        1. 面向无连接.
                        2. 采用数据报包的形式发送数据, 每个包的大小不能超过64KB.
                        3. 是不安全(不可靠)协议.
                        4. 效率相对比较高.
                        5. 不区分服务器端和客户端, 叫: 发送端和接收端.
                    TCP:        //举例:  打电话
                        1. 面向有连接(三次握手).
                        2. 采用IO流的形式发送数据, 理论上来讲数据无大小限制.
                        3. 是安全(可靠)协议.
                        4. 效率相对比较低.
                        5. 区分服务器端和客户端.
 */
public class Demo {
    public static void main(String[] args) throws UnknownHostException {
        //String类型的IP     ->    InetAddress IP地址对象.
        String ip = "192.168.10.105";
        String host = "HangGe";
        //InetAddress inet = InetAddress.getByName(ip);   //如果是根据ip地址获取的 ip地址对象, 获取主机名的时候也是ip地址.
        InetAddress inet = InetAddress.getByName(host);
        System.out.println(inet);
        System.out.println("-------------------");

        //InetAddress IP地址对象  ->  String类型的IP
        String hostAddress = inet.getHostAddress();
        String hostName = inet.getHostName();
        System.out.println("hostAddress: " + hostAddress);
        System.out.println("hostName: " + hostName);
    }
}
